// package com.dd.controller;

// import com.dd.model.AQIData;
// import com.dd.service.AQIDataService;
// import javafx.collections.FXCollections;
// import javafx.fxml.FXML;
// import javafx.fxml.FXMLLoader;
// import javafx.scene.Parent;
// import javafx.scene.chart.BarChart;
// import javafx.scene.chart.CategoryAxis;
// import javafx.scene.chart.NumberAxis;
// import javafx.scene.chart.XYChart;
// import javafx.scene.layout.VBox; // 需要这个来替换内容

// import java.util.HashMap;
// import java.util.List;
// import java.util.Map;
// import java.util.stream.Collectors;

// public class ProvinceAqiStatsController {

//     @FXML
//     private BarChart<String, Number> provinceAqiChart;
//     @FXML
//     private CategoryAxis provinceAxis;
//     @FXML
//     private NumberAxis countAxis;

//     private AQIDataService aqiDataService = new AQIDataService();

//     @FXML
//     public void initialize() {
//         loadProvinceStats();
//     }

//     private void loadProvinceStats() {
//         List<AQIData> allAqiData = aqiDataService.getAllAQIData();

//         // 定义超标的AQI等级，可以根据实际业务规则调整
//         List<String> exceedingLevels = List.of("轻度污染", "中度污染", "重度污染", "严重污染");

//         // 统计每个省份的超标数量
//         Map<String, Long> provinceExceedingCount = allAqiData.stream()
//                 .filter(data -> exceedingLevels.contains(data.getActualAqiLevel()))
//                 .collect(Collectors.groupingBy(AQIData::getProvince, Collectors.counting()));

//         // 创建系列数据
//         XYChart.Series<String, Number> series = new XYChart.Series<>();
//         series.setName("AQI超标数量");

//         // 将统计结果添加到系列中
//         provinceExceedingCount.entrySet().stream()
//                 .sorted(Map.Entry.comparingByKey()) // 按省份名称排序
//                 .forEach(entry -> series.getData().add(new XYChart.Data<>(entry.getKey(), entry.getValue())));

//         provinceAqiChart.getData().clear();
//         provinceAqiChart.getData().add(series);

//         provinceAqiChart.setTitle("各省AQI超标数量统计");
//         provinceAxis.setLabel("省份");
//         countAxis.setLabel("超标数量");
//     }

//     @FXML
//     private void handleBackToMenuClick() {
//         try {
//             // 加载统计菜单界面
//             FXMLLoader loader = new FXMLLoader(getClass().getResource("/com/dd/statistics-menu.fxml"));
//             Parent statisticsMenu = loader.load();

//             // 找到当前统计图的父容器 (这里假定是BorderPane，其父容器就是StackPane contentArea或直接VBox)
//             // 理想情况下，您应该通过某种机制获取到MainMenuController的contentArea
//             // 暂时简单粗暴地关闭当前窗口或替换上级容器

//             // 如果当前页面直接在MainMenuController的contentArea中，那么可以通过其父节点找到MainMenuController
//             // 但是由于在StatisticsMenuController中直接替换了VBox内容，所以这里需要更复杂的处理
//             // 最简单的方式是直接替换rootVBox，但这需要MainController的引用

//             // 临时的解决方案：假设这个界面是弹窗，或者通过上一级控制器传递一个回调
//             // 鉴于我们是在MainMenuController的StackPane中加载的，我们可以让MainController来控制
//             // 这里我们假设返回按钮会关闭当前统计页面，并让Main Menu Controller重新加载 statistics-menu.fxml
//             // 但这在当前设计中有点复杂，因为 StatisticsMenuController 自身没有 MainMenuController 的引用。

//             // 最简单且符合我们当前设计的做法是：
//             // StatisticsMenuController 的 loadStatisticView 替换了它自己的 VBox。
//             // 所以，如果要在 ProvinceAqiStatsController 中返回到 StatisticsMenuController 的主界面，
//             // 同样需要替换其父容器的内容。
//             // 假设 ProvinceAqiStatsController 的根节点是 BorderPane，其父节点就是 StatisticsMenuController 的 VBox。
//             // 理想的做法是，将 MainMenuController 的 contentArea 引用传递给 StatisticsMenuController，
//             // 然后 StatisticsMenuController 将 contentArea 传递给各个统计子控制器。

//             // 这里我们采取一个简化的方案：让 App 重新加载主菜单，但这会有点重。
//             // 更好的办法是 MainMenuController 管理其 contentArea。
//             // 考虑到手把手教学，我们暂时让它关闭当前 Stage，或者更直接地，让 StatisticsMenuController 知道如何替换自身内容。
//             // 为了能"返回统计菜单"，我们改一下 `StatisticsMenuController` 的 `loadStatisticView` 逻辑。
//             // 现在，我们直接让 `StatisticsMenuController` 来承载所有的统计子页面，并通过替换其 `rootVBox` 的子节点来实现切换。
//             // 所以，这里的返回操作，应该让 `StatisticsMenuController` 重新加载 `statistics-menu.fxml` 或者直接重置 `rootVBox`

//             // 修正：我们让 MainMenuController 的 loadContent 机制来统一处理子视图加载。
//             // 那么，`StatisticsMenuController` 就不需要直接替换 `rootVBox` 了，而是调用 `MainMenuController` 的方法。
//             // 这需要 `StatisticsMenuController` 拿到 `MainMenuController` 的实例。
//             // 为了教学简单，我们先保持 `StatisticsMenuController` 替换自己的 `rootVBox`。
//             // 这里的 "返回统计菜单" 按钮逻辑，应该让 `StatisticsMenuController` 重新显示它的初始菜单。

//             // 假设 StatisticsMenuController 有一个方法来重新显示菜单
//             // 理想情况下，每个统计页面应该拿到 MainMenuController 的引用，然后调用它的方法来加载 StatisticsMenuController。

//             // 为了不增加新的复杂性，我们暂时让它关闭当前窗口，或者，我们让这个控制器知道如何回到它的主菜单界面。
//             // 这种情况下，`ProvinceAqiStatsController` 应该知道它被加载到哪个 `StackPane` 中，并清除它。

//             // 最直接的方法：从当前场景获取 Stage 并关闭。但这会关闭整个应用，不是我们想要的。
//             // 所以，我们重新审视 StatisticsMenuController 和 MainMenuController 的交互。
//             // 理想的：
//             // MainMenuController 有一个 contentArea (StackPane)。
//             // 点击 "统计数据管理" -> MainMenuController 在 contentArea 加载 statistics-menu.fxml (由 StatisticsMenuController 控制)。
//             // StatisticsMenuController (作为 contentArea 的子控制器) 接收 MainMenuController 的 contentArea 引用。
//             // 当点击 "省分组检查统计" 时，StatisticsMenuController 在传入的 contentArea 中加载 province-aqi-stats.fxml。
//             // 当 province-aqi-stats.fxml 中的 "返回统计菜单" 被点击时，它调用 StatisticsMenuController 的方法，
//             // 让 StatisticsMenuController 重新加载 statistics-menu.fxml 到 contentArea。

//             // 我们重构一下 MainMenuController 和 StatisticsMenuController 的交互逻辑，使其更合理。
//             // 为了简单起见，我们让每个统计界面都是一个独立的FXML，并且当点击"返回"时，
//             // 我们只是在当前Stage中替换回 StatisticsMenuController 的 FXML。
//             // 这意味着 StatisticsMenuController 需要能够被"重新加载"或"重置"。

//             // 最简单的实现，但不是最佳实践：直接关闭当前窗口，让用户重新点击统计菜单。
//             // 或者，我们可以通过事件或直接引用来通知MainMenuController。

//             // 为了手把手教学，这里我们让 `handleBackToMenuClick` 关闭当前Stage
//             // 缺点是会关闭整个应用或者模态窗口。
//             // 最好的方法是 `MainMenuController` 来统一管理 `contentArea` 的加载。

//             // 假设我们现在是在 MainMenuController 的 contentArea 中加载了 statistics-menu.fxml，
//             // 然后 statistics-menu.fxml 又在自己的内部加载了 province-aqi-stats.fxml。
//             // 那么 `handleBackToMenuClick` 应该通知 `StatisticsMenuController` 切换回其初始界面。
//             // 这需要 `ProvinceAqiStatsController` 持有 `StatisticsMenuController` 的引用，或者通过回调。

//             // 让我们简化为：MainMenuController 直接加载不同的统计图表FXML，而不是通过 StatisticsMenuController 嵌套。
//             // 这意味着 MainMenuController 中的 "统计数据管理" 按钮不再加载 `statistics-menu.fxml`，
//             // 而是显示一个子菜单，或者直接将所有统计选项平铺到主菜单左侧。

//             // 回到需求：主菜单有"统计数据管理"。点进去才看到统计选项。
//             // 所以 `statistics-menu.fxml` 是一个二级菜单。
//             // 让我们重新思考 `MainMenuController` 和 `StatisticsMenuController` 的关系。

//             // **重构MainMenuController和StatisticsMenuController的交互**
//             // 1. `MainMenuController` 负责加载 `statistics-menu.fxml` 到 `contentArea`。
//             // 2. `StatisticsMenuController` 将负责在**它自己内部**切换不同的统计图。
//             //    为此，`statistics-menu.fxml` 需要有一个内部的 `StackPane` 或 `AnchorPane` 来显示具体的统计图。

//             // (重新设计 `statistics-menu.fxml`)
//             // (修改 `StatisticsMenuController` 来管理内部的子视图)

//         } catch (Exception e) {
//             e.printStackTrace();
//         }
//     }
// }
